package com.model;

import java.util.ArrayList;
import java.util.List;

/*
 * 消息的发布者工具类，对应于观察者设计模式中的
 */
public abstract class AbstractPublisher {
	/**
	  * 存放订阅者
	  * 用于存放监听消息发布者发布消息的集合
	  * 对应于观察者设计模式就是存放观察者
	  */
	 List<ISubscriber> subscribers = new ArrayList<ISubscriber>();
	 
	 /**
	  * 注册订阅者(观察者)
	  * @param subscriber
	  */
	 public void registrSubscriber(ISubscriber subscriber) {
	  subscribers.add(subscriber);
	 }
	 
	 /**
	  * 移除订阅者(观察者)
	  * @param subscriber
	  */
	 public void removeSubscriber(ISubscriber subscriber) {
	  subscribers.remove(subscriber);
	 }
	 
	 /**
	  * 发布者(被观察者)发布了消息后通知所有订阅者(观察者)
	  * @param obj
	  */
	 public void noticeSubscriber(Object obj) {
	  if(null != subscribers) {
	   for(ISubscriber subscriber: subscribers) {
	    subscriber.update(this, obj);
	   }
	  }
	 }
}
